package com.brave.mvvm.helper.core

import com.blankj.utilcode.util.CrashUtils
import com.brave.mvvm.mvvmhelper.base.CommonApp
import com.brave.mvvm.mvvmhelper.http.ExceptionHandle
import com.lzy.okgo.OkGo
import com.lzy.okgo.cache.CacheEntity
import com.lzy.okgo.cache.CacheMode
import com.orhanobut.logger.AndroidLogAdapter
import com.orhanobut.logger.FormatStrategy
import com.orhanobut.logger.Logger
import com.orhanobut.logger.PrettyFormatStrategy

/**
 * ***author***     ：BraveTou
 *
 * ***blog***       ：https://blog.csdn.net/bravetou
 *
 * ***time***       ：2020/12/10 14:55
 *
 * ***desc***       ：SApp
 */
class PApp : CommonApp() {
    companion object {
        @JvmStatic
        val instance: PApp
            get() = default as PApp
    }

    override fun onCreate() {
        super.onCreate()
        initAutoSize()
        // initRealm()
        initLogger()
        initOkgo()
    }

    private fun initOkgo() {
        OkGo.getInstance().init(this)// 必须调用初始化
            // 建议设置OkHttpClient，不设置将使用默认的
            .setCacheMode(CacheMode.NO_CACHE) // 全局统一缓存模式，默认不使用缓存，可以不传
            .setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) // 全局统一缓存时间，默认永不过期，可以不传
            .retryCount = 3 // 全局统一超时重连次数，默认为三次，那么最差的情况会请求4次
        // (一次原始请求，三次重连请求)，不需要可以设置为0
    }

    /**
     * 初始化Logger
     */
    override fun initLogger() {
        val formatStrategy: FormatStrategy = PrettyFormatStrategy.newBuilder()
            .tag("PrivacyToMonitor")
            .build()
        Logger.addLogAdapter(object : AndroidLogAdapter(formatStrategy) {
            override fun isLoggable(priority: Int, tag: String?): Boolean {
                super.isLoggable(priority, tag)
                return PAppConfig.DEBUG
            }
        })
    }

    //    /**
    //     * 初始化Realm数据库
    //     */
    //    private fun initRealm() {
    //        Realm.init(this)
    //        Realm.setDefaultConfiguration(
    //            RealmConfiguration.Builder()
    //                .name(RealmMigrationImpl.DATABASE_NAME)
    //                .schemaVersion(RealmMigrationImpl.DATABASE_VERSION)
    //                .migration(RealmMigrationImpl.getInstance())
    //                .allowWritesOnUiThread(true)
    //                .allowQueriesOnUiThread(true)
    //                .build()
    //        )
    //    }

    /**
     * 初始化AutoSize
     */
    private fun initAutoSize() {
        CrashUtils.init()
        ExceptionHandle.getInstance()
            .setCallback { integer: Int?, s: String?, unitFunction1: Function1<Throwable?, Unit>?, o: Any? ->
                unitFunction1?.invoke(Throwable("This is a custom error"))
                true
            }
    }
}